const { fs, path } = require('@vuepress/shared-utils');

module.exports = function demo_soure(md, options = {}) {
	const root = options.root || process.cwd();
	function parser(state, startLine, endLine, silent) {
		const CH = '*'.charCodeAt(0);
		const pos = state.bMarks[startLine] + state.tShift[startLine];
		const max = state.eMarks[startLine];

		// if it's indented more than 3 spaces, it should be a code block
		if (state.sCount[startLine] - state.blkIndent >= 4) {
			return false;
		}

		for (let i = 0; i < 3; ++i) {
			const ch = state.src.charCodeAt(pos + i);
			if (ch !== CH || pos + i >= max) return false;
		}

		if (silent) {
			return true;
		}

		const start = pos + 3;
		const end = state.skipSpacesBack(max, pos);
		const rawPath = state.src.slice(start, end).trim().replace(/^@/, root);
		const filename = rawPath.split(/[{:\s]/).shift();
		const content = fs.existsSync(filename) ? fs.readFileSync(filename).toString() : 'Not found: ' + filename;
		const meta = rawPath.replace(filename, '');
    console.log('root', root);
    console.log(path.join(process.cwd()));
    console.log('rawPath', rawPath);
    console.log('filename', filename);
    console.log('meta', meta);

		state.line = startLine + 1;

		const token = state.push('fence', 'code', 0);
		token.info = filename.split('.').pop() + meta;
		token.content = content;
		token.markup = '```';
		token.map = [startLine, startLine + 1];

		return true;
	}

	md.block.ruler.before('fence', 'demo_soure', parser);
};
